10683. Десятичные часы
Однажды
математик Гильберт Ром изобрел часы с десятичной системой исчисления. День был
поделен на 10 часов, в каждом часе было 100 минут, а в каждой минуте – 100
секунд. В задаче требуется перевести время из традиционной системы в десятичную
с точностью до одной сотой секунды.
Вход.
Состоит из нескольких строк. Каждая строка содержит традиционное время в
формате HHMMSSCC, где 0 £ HH £ 23, 0 £ MM £ 59, 0 £ SS £ 59, 0 £ CC £ 99.
Выход. Для каждого теста вывести его
соответствующее десятичное время в формате HMMSSCC, где 0 £ H £ 9, 0 £ MM £ 99, 0 £ SS £ 99, 0 £ CC £ 99.
Значение десятичного времени следует округлить вниз.
00000000
23595999
12000000
14273467
02475901
0000000
9999998
5000000
6024846
1166552
математика
Вычислим, сколько миллисекунд в
обыкновенной нотации приходится на одну миллисекунду в десятичной. Для этого
следует поделить суммарное число миллисекунд в сутках в десятичной системе (оно
равно 10 * 100 * 100 * 100) на число миллисекунд в обыкновенной (24 * 60 * 60 *
100). Далее следует вычислить число миллисекунд во входном традиционном времени, умножить его на полученное выше
соотношение и округлить до целого снизу. Полученное десятичное время следует
выводить с ведущими нулями.
Соотношение между секундой в
десятичной системе и секундой в обыкновенной системе равно 10 * 100 * 100 * 100
/ 24 * 60 * 60 * 100 = 1.1574074. Для второго теста общее число миллисекунд
равно 23 * 3600 * 100 + 59 * 60 * 100 + 59 * 100 + 99 = 8639999. Умножив его на
выше полученное соотношение, получим 8639999 * 1.1574074 = 9999998,7785926.
Округлив значение до целой части, получим 9999998. Это и есть соответствующее
время в десятичной системе.
Объявим необходимые переменные. В
переменной TotalMiliSeconds содержится количество миллисекунд в сутках
при стандартной записи времени, в переменной TotalDecSeconds – при
десятичной. Переменная rate содержит их отношение.
int h, m, s, c, MiliSeconds;
int TotalMiliSeconds = 24*3600*100;
int TotalDecSeconds = 10*10000*100;
int Res;
double rate = (double)TotalDecSeconds
/ TotalMiliSeconds;
Читаем количество часов h,
минут m, секунд s и миллисекунд c, вычисляем общее
количество миллисекунд MiliSeconds в текущем времени в стандартной
нотации и умножаем полученное значение на rate. Округляем его, выделяя
целое число, и печатаем в формате с обязательным выводом ведущих нулей (если
таковы имеются). Всего выводится 7 цифр, поэтому формат вывода будет
"%07d".
while (scanf("%2d%2d%2d%2d",&h,&m,&s,&c)
== 4)
{
MiliSeconds = h * 3600 * 100 + m * 60 * 100 +
s * 100 + c;
Res = int(rate
* MiliSeconds);
printf("%07d\n",Res);
}